package com.itheima.controller;

import com.itheima.dto.ReviewDTO;
import com.itheima.entity.Review;
import com.itheima.entity.User;
import com.itheima.service.ReviewService;
import com.itheima.service.UserService;
import com.itheima.util.JwtUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/review")
public class ReviewController {

    @Autowired
    private ReviewService reviewService;
    @Autowired
    private JwtUtil jwtUtil;
    @Autowired
    private UserService userService;
    // 添加审核记录
    @PostMapping
    public ResponseEntity<Review> addReview(@RequestBody Review review,
                                            @RequestHeader("Authorization") String token) {
        // 从 Authorization 头中获取 Token
        if (token.startsWith("Bearer ")) {
            token = token.substring(7);
        }

        // 获取当前用户
        String username = jwtUtil.extractUsername(token);
        User user = userService.findByUsername(username).orElse(null);

        if (user.getIsSuper()) {
            // 如果是管理员，返回所有动物信息
            return ResponseEntity.status(201).body(reviewService.createReview(review));
        } else {
            // 如果是普通用户，返回已审核的动物信息
            return ResponseEntity.ok(null);
        }

    }

    // 获取所有审核记录
    @GetMapping
    public ResponseEntity<List<Review>> getAllReviews(@RequestHeader("Authorization") String token) {
        // 从 Authorization 头中获取 Token
        if (token.startsWith("Bearer ")) {
            token = token.substring(7);
        }

        // 获取当前用户
        String username = jwtUtil.extractUsername(token);
        User user = userService.findByUsername(username).orElse(null);

        if (user.getIsSuper()) {
            // 如果是管理员，返回所有动物信息
            return ResponseEntity.ok(reviewService.getAllReviews());
        } else {
            // 如果是普通用户，返回已审核的动物信息
            return ResponseEntity.ok(null);
        }

    }

    // 根据动物ID获取审核记录
    @GetMapping("/animal/{animalId}")
    public ResponseEntity<List<Review>> getReviewsByAnimalId(@PathVariable Long animalId,
                                                             @RequestHeader("Authorization") String token) {
        // 从 Authorization 头中获取 Token
        if (token.startsWith("Bearer ")) {
            token = token.substring(7);
        }

        // 获取当前用户
        String username = jwtUtil.extractUsername(token);
        User user = userService.findByUsername(username).orElse(null);

        if (user.getIsSuper()) {
            // 如果是管理员，返回所有动物信息
            return ResponseEntity.ok(reviewService.getReviewsByAnimalId(animalId));
        } else {
            // 如果是普通用户，返回已审核的动物信息
            return ResponseEntity.ok(null);
        }

    }



    // 更新审核记录
    @PutMapping("/{reviewId}")
    public ResponseEntity<Review> updateReview(@PathVariable Long reviewId,
                                               @RequestBody ReviewDTO reviewDTO,
                                               @RequestHeader("Authorization") String token) {
        // 从 Authorization 头中获取 Token
        if (token.startsWith("Bearer ")) {
            token = token.substring(7);
        }

        // 获取当前用户
        String username = jwtUtil.extractUsername(token);
        User user = userService.findByUsername(username).orElse(null);

        if (user.getIsSuper()) {
            // 如果是管理员，返回所有动物信息
            return ResponseEntity.ok(reviewService.updateReview(reviewId, reviewDTO));
        } else {
            // 如果是普通用户，返回已审核的动物信息
            return ResponseEntity.ok(null);
        }

    }

    // 删除审核记录
    @DeleteMapping("/{reviewId}")
    public ResponseEntity<Void> deleteReview(@PathVariable Long reviewId,
                                             @RequestHeader("Authorization") String token) {
        // 从 Authorization 头中获取 Token
        if (token.startsWith("Bearer ")) {
            token = token.substring(7);
        }

        // 获取当前用户
        String username = jwtUtil.extractUsername(token);
        User user = userService.findByUsername(username).orElse(null);

        if (user.getIsSuper()) {
            // 如果是管理员，返回所有动物信息
            reviewService.deleteReview(reviewId);
            return ResponseEntity.noContent().build();
        } else {
            // 如果是普通用户，返回已审核的动物信息
            return ResponseEntity.ok(null);
        }

    }
}